home *** CD-ROM | disk | FTP | other *** search
/ Chip 2001 June / CHIP Haziran 2001.iso / prog / haziran / 19 / setup.exe / data.z / cmos_lib.c < prev    next >
C/C++ Source or Header  |  2001-04-11  |  3KB  |  139 lines

  1. //////////////////////////////////////////////////////////////////////
  2. // File - cmos_lib.c
  3. //
  4. // Library for accessing the CMOS on the motherboard directly,
  5. // Code was generated by WinDriver Wizard.
  6. // Application uses WinDriver to access hardware.
  7. // 
  8. //////////////////////////////////////////////////////////////////////
  9.  
  10. #include "cmos_lib.h"
  11. #include <stdio.h>
  12.  
  13. // this string is set to an error message, if one occurs
  14. CHAR CMOS_ErrorString[1024];
  15.  
  16. // internal function used by CMOS_Open()
  17. void CMOS_SetCardElements(CMOS_HANDLE hCMOS);
  18.  
  19. BOOL CMOS_Open (CMOS_HANDLE *phCMOS)
  20. {
  21.     CMOS_HANDLE hCMOS = (CMOS_HANDLE) malloc (sizeof (CMOS_STRUCT));
  22.  
  23.     WD_VERSION ver;
  24.  
  25.     *phCMOS = NULL;
  26.     CMOS_ErrorString[0] = '\0';
  27.     BZERO(*hCMOS);
  28.  
  29.     hCMOS->hWD = WD_Open();
  30.  
  31.     // check if handle valid & version OK
  32.     if (hCMOS->hWD==INVALID_HANDLE_VALUE)
  33.     {
  34.         sprintf( CMOS_ErrorString, "Failed opening " WD_PROD_NAME " device\n");
  35.         goto Exit;
  36.     }
  37.  
  38.     BZERO(ver);
  39.     WD_Version(hCMOS->hWD,&ver);
  40.     if (ver.dwVer<WD_VER)
  41.     {
  42.         sprintf( CMOS_ErrorString, "Incorrect " WD_PROD_NAME " version\n");
  43.         goto Exit;
  44.     }
  45.  
  46.     CMOS_SetCardElements(hCMOS);
  47.     hCMOS->cardReg.fCheckLockOnly = FALSE;
  48.     WD_CardRegister (hCMOS->hWD, &hCMOS->cardReg);
  49.     if (hCMOS->cardReg.hCard==0)
  50.     {
  51.         sprintf ( CMOS_ErrorString, "Failed locking device\n");
  52.         goto Exit;
  53.     }
  54.  
  55.     // Open finished OK
  56.     *phCMOS = hCMOS;
  57.     return TRUE;
  58.  
  59. Exit:
  60.     // Error during Open
  61.     if (hCMOS->cardReg.hCard) 
  62.         WD_CardUnregister(hCMOS->hWD, &hCMOS->cardReg);
  63.     if (hCMOS->hWD!=INVALID_HANDLE_VALUE)
  64.         WD_Close(hCMOS->hWD);
  65.     free (hCMOS);
  66.     return FALSE;
  67. }
  68.  
  69. void CMOS_Close(CMOS_HANDLE hCMOS)
  70. {
  71.     // unregister card
  72.     if (hCMOS->cardReg.hCard) 
  73.         WD_CardUnregister(hCMOS->hWD, &hCMOS->cardReg);
  74.  
  75.     // close WinDriver
  76.     WD_Close(hCMOS->hWD);
  77.  
  78.     free (hCMOS);
  79. }
  80.  
  81. void CMOS_SetCardElements(CMOS_HANDLE hCMOS)
  82. {
  83.     int i=0;
  84.     WD_ITEMS* pItem;
  85.     hCMOS->cardReg.Card.dwItems = CMOS_ITEMS;
  86.     pItem = &hCMOS->cardReg.Card.Item[0];
  87.  
  88.     // CMOS IO range
  89.     pItem[CMOS_IO].item = ITEM_IO;
  90.     pItem[CMOS_IO].fNotSharable = FALSE;
  91.     pItem[CMOS_IO].I.IO.dwAddr = CMOS_IO_ADDR;
  92.     pItem[CMOS_IO].I.IO.dwBytes = CMOS_IO_BYTES;
  93. }
  94.  
  95. void CMOS_WriteAddress (CMOS_HANDLE hCMOS, BYTE addr)
  96. {
  97.     WD_TRANSFER trans;
  98.  
  99.     BZERO(trans);
  100.     trans.cmdTrans = WP_BYTE;
  101.     trans.dwPort = CMOS_IO_ADDR + CMOS_Address_OFFSET;
  102.     trans.Data.Byte = addr;
  103.     WD_Transfer(hCMOS->hWD, &trans);
  104. }
  105.  
  106. BYTE CMOS_ReadData (CMOS_HANDLE hCMOS)
  107. {
  108.     WD_TRANSFER trans;
  109.  
  110.     BZERO(trans);
  111.     trans.cmdTrans = RP_BYTE;
  112.     trans.dwPort = CMOS_IO_ADDR + CMOS_Data_OFFSET;
  113.     WD_Transfer(hCMOS->hWD, &trans);
  114.     return trans.Data.Byte;
  115. }
  116.  
  117. void CMOS_WriteData (CMOS_HANDLE hCMOS, BYTE data)
  118. {
  119.     WD_TRANSFER trans;
  120.  
  121.     BZERO(trans);
  122.     trans.cmdTrans = WP_BYTE;
  123.     trans.dwPort = CMOS_IO_ADDR + CMOS_Data_OFFSET;
  124.     trans.Data.Byte = data;
  125.     WD_Transfer(hCMOS->hWD, &trans);
  126. }
  127.  
  128. BYTE CMOS_Read (CMOS_HANDLE hCMOS, BYTE addr)
  129. {
  130.     CMOS_WriteAddress(hCMOS, addr);
  131.     return CMOS_ReadData(hCMOS);
  132. }
  133.  
  134. void CMOS_Write (CMOS_HANDLE hCMOS, BYTE addr, BYTE data)
  135. {
  136.     CMOS_WriteAddress(hCMOS, addr);
  137.     CMOS_WriteData(hCMOS, data);
  138. }
  139.